package com.github.jspxnet.worktask.dao;

import com.github.jspxnet.enums.RecycleEnumType;
import com.github.jspxnet.sober.SoberSupport;
import com.github.jspxnet.worktask.table.ConfFlowJob;
import com.github.jspxnet.worktask.table.ConfFlowNode;
import com.github.jspxnet.worktask.table.ConfWorkFlow;
import com.github.jspxnet.worktask.table.DocumentFlowConf;

import java.util.List;

public interface ConfWorkFlowDAO extends SoberSupport {
    /**
     * @param id id
     * @return 载入
     */
    ConfWorkFlow load(long id);
    /**
     *
     * @param id id
     * @return 删除所有节点
     */
    int delete(long id);
    /**
     *
     * @param flowNo 流程编号
     * @param namespace 命名空间
     * @return 流程配置
     */
    ConfWorkFlow getByFlowNo(String flowNo, String namespace);
    /**
     * @param field      字段
     * @param find       查询字符串 "" 自动分开查询
     * @param term       条件
     * @param sortString 排序字符串
     * @param uid        用户id
     * @param page       页数
     * @param count      返回数量
     * @return 返回对象列表
     */
    List<ConfWorkFlow> getList(String[] field, String[] find, String namespace, String term, long uid, String sortString, int page, int count);
    /**
     *
     * @param flowNo 流程
     * @param namespace 命名空间
     * @param nodeId 节点
     * @return 得到下一步的节点配置
     */
    List<ConfFlowNode> getNextList(String flowNo, String namespace,String nodeId);

    List<ConfFlowNode> getJoinConfFlowNode(String flowNo, String namespace, String nodeId);

    /**
     *
     * @param flowNo 流程
     * @param namespace 命名空间
     * @param nodeId 节点
     * @return  得到节点配置
     */
    ConfFlowNode getConfFlowNode(String flowNo, String namespace, String nodeId);

    ConfFlowNode finishConfFlowNode(String flowNo, String namespace);

    /**
     * @param field 字段
     * @param find  条件
     * @param term  条件表达式
     * @param uid   用户id
     * @return 得到记录条数
     */
    long getCount(String[] field, String[] find, String namespace, String term, long uid);
    /**
     * @param ids id 列表
     * @return 放入回收站标识
     */
    boolean recycleType(String[] ids, RecycleEnumType recycleEnumType);
    /**
     *
     * @param flowNo  流程
     * @param namespace 命名空间
     * @param nodeId 节点
     * @return 任务配置
     */
    ConfFlowJob getConfFlowJob(String flowNo, String namespace, String nodeId);
    /**
     *
     * @param flowNo 流程
     * @param namespace 命名空间
     * @return 得到文档的独立配置
     */
    DocumentFlowConf getDocumentFlowConf(String flowNo, String namespace);
    /**
     *
     * @param flowNo  流程
     * @param namespace 命名空间
     * @return 任务列表
     */
    List<ConfFlowJob> getConfFlowJobList(String flowNo, String namespace);
}
